import { replaceHtml } from '../utils/util';
import { modelHTML } from './constant';
import { selectHightlightShow } from './select';
import tooltip from '../global/tooltip';
import editor from '../global/editor';
import { setcellvalue } from '../global/setdata';
import { getcellvalue } from '../global/getdata';
import { jfrefreshgrid } from '../global/refresh';
import Store from '../store';
import locale from '../locale/locale';

// 分列
const luckysheetSplitColumn = {
    createDialog: function () {
        let _this = this;

        const _locale = locale();
        const locale_splitText = _locale.splitText;
        const locale_punctuation = _locale.punctuation;
        const locale_button = _locale.button;

        $("#luckysheet-modal-dialog-mask").show();
        $("#luckysheet-splitColumn-dialog").remove();

        let content = '<div class="box">' +
                        '<div class="boxTitle">' + locale_splitText.splitDelimiters + '</div>' +
                        '<div class="boxMain">' +
                            '<div style="height: 22px;line-height: 22px;">' +
                                '<input id="splitColumn_type_01" type="checkbox"/>' +
                                '<label for="splitColumn_type_01">' + locale_punctuation.tab + '</label>' +
                            '</div>' +
                            '<div style="height: 22px;line-height: 22px;">' +
                                '<input id="splitColumn_type_02" type="checkbox"/>' +
                                '<label for="splitColumn_type_02">' + locale_punctuation.semicolon + '</label>' +
                            '</div>' +
                            '<div style="height: 22px;line-height: 22px;">' +
                                '<input id="splitColumn_type_03" type="checkbox"/>' +
                                '<label for="splitColumn_type_03">' + locale_punctuation.comma + '</label>' +
                            '</div>' +
                            '<div style="height: 22px;line-height: 22px;">' +
                                '<input id="splitColumn_type_04" type="checkbox"/>' +
                                '<label for="splitColumn_type_04">' + locale_punctuation.space + '</label>' +
                            '</div>' +
                            '<div style="height: 22px;line-height: 22px;">' +
                                '<input id="splitColumn_type_05" type="checkbox"/>' +
                                '<label for="splitColumn_type_05">' + locale_splitText.splitOther + '</label>' +
                                '<input type="text" class="formulaInputFocus" maxlength="1"/>' +
                            '</div>' +
                        '</div>' +
                        '<div style="height: 22px;line-height: 22px;">' +
                            '<input id="splitColumn_type_06" type="checkbox"/>' +
                            '<label for="splitColumn_type_06">' + locale_splitText.splitContinueSymbol + '</label>' +
                        '</div>' +
                        '<div class="boxTitle" style="margin-top: 10px;">' + locale_splitText.splitDataPreview + '</div>' +
                        '<div class="boxMain" id="splitColumnData">' +

                        '</div>' +
                      '</div>';

        $("body").append(replaceHtml(modelHTML, {
            "id": "luckysheet-splitColumn-dialog",
            "addclass": "luckysheet-splitColumn-dialog",
            "title": locale_splitText.splitTextTitle,
            "content": content,
            "botton": '<button id="luckysheet-splitColumn-dialog-confirm" class="btn btn-primary">' + locale_button.confirm + '</button><button class="btn btn-default luckysheet-model-close-btn">' + locale_button.cancel + '</button>',
            "style": "z-index:193"
        }));
        let $t = $("#luckysheet-splitColumn-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 400).end(),
            myh = $t.outerHeight(),
            myw = $t.outerWidth();
        let winw = $(window).width(), winh = $(window).height();
        let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
        $("#luckysheet-splitColumn-dialog").css({ "left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3 }).show();

        let dataArr = _this.getDataArr();
        _this.dataPreview(dataArr);
    },
    init: function () {
        let _this = this;
        const _locale = locale();
        const locale_splitText = _locale.splitText;

        // 数据预览
        $(document).off("change.SPCinpcheckbox").on("change.SPCcheckbox", "#luckysheet-splitColumn-dialog .box input[type='checkbox']", function () {
            let regStr = _this.getRegStr();
            let dataArr = _this.getDataArr(regStr);
            _this.dataPreview(dataArr);
        });
        $(document).off("keyup.SPCinptext").on("keyup.SPCinptext", "#luckysheet-splitColumn-dialog .box input[type='text']", function () {
            if ($(this).siblings("input[type='checkbox']").is(":checked")) {
                let regStr = _this.getRegStr();
                let dataArr = _this.getDataArr(regStr);
                _this.dataPreview(dataArr);
            }
        });

        // 确定按钮
        $(document).off("click.SPCconfirm").on("click.SPCconfirm", "#luckysheet-splitColumn-dialog #luckysheet-splitColumn-dialog-confirm", function () {
            $("#luckysheet-modal-dialog-mask").hide();
            $("#luckysheet-splitColumn-dialog").hide();

            let regStr = _this.getRegStr();
            let dataArr = _this.getDataArr(regStr);

            let r = Store.luckysheet_select_save[0].row[0];
            let c = Store.luckysheet_select_save[0].column[0];

            if (dataArr[0].length == 1) {
                return;
            }

            let dataCover = false;
            for (let i = 0; i < dataArr.length; i++) {
                for (let j = 1; j < dataArr[0].length; j++) {
                    let cell = Store.flowdata[r + i][c + j];

                    if (cell != null && cell.v != null) {
                        dataCover = true;
                        break;
                    }
                }
            }

            if (dataCover) {
                let func1 = function () {
                    _this.update(r, c, dataArr);
                };

                tooltip.confirm("", locale_splitText.splitConfirmToExe, func1);
            } else {
                _this.update(r, c, dataArr);
            }
        });
    },
    update: function (r, c, dataArr) {
        let d = Store.flowdata;

        for (let i = 0; i < dataArr.length; i++) {
            for (let j = 0; j < dataArr[0].length; j++) {
                let v = dataArr[i][j];
                setcellvalue(r + i, c + j, d, v);
            }
        }

        let st_r = Store.luckysheet_select_save[0].row[0],
            st_c = Store.luckysheet_select_save[0].column[0];

        let range = [{ "row": [st_r, st_r + dataArr.length - 1], "column": [st_c, st_c + dataArr[0].length - 1] }];

        jfrefreshgrid(d, range);
        selectHightlightShow();
    },
    dataPreview: function (dataArr) {
        $("#luckysheet-splitColumn-dialog #splitColumnData").empty();

        let trHtml = '';

        for (let i = 0; i < dataArr.length; i++) {
            let tdHtml = '';

            for (let j = 0; j < dataArr[0].length; j++) {
                tdHtml += '<td>' + dataArr[i][j] + '</td>';
            }

            trHtml += '<tr>' + tdHtml + '</tr>';
        }

        let tableHtml = '<table>' + trHtml + '</table>';

        $("#luckysheet-splitColumn-dialog #splitColumnData").append(tableHtml);
    },
    getRegStr: function () {
        let regStr = '', mark = 0;

        $("#luckysheet-splitColumn-dialog .box input[type='checkbox']:checked").each(function (i, e) {
            let $id = $(e).attr("id");

            if ($id == "splitColumn_type_01") { // Tab键
                regStr += "\\t";
                mark++;
            } else if ($id == "splitColumn_type_02") { // 分号
                if (mark > 0) {
                    regStr += "|";
                }

                regStr += ";";
                mark++;
            } else if ($id == "splitColumn_type_03") { // 逗号
                if (mark > 0) {
                    regStr += "|";
                }

                regStr += ",";
                mark++;
            } else if ($id == "splitColumn_type_04") { // 空格
                if (mark > 0) {
                    regStr += "|";
                }

                regStr += "\\s";
                mark++;
            } else if ($id == "splitColumn_type_05") { // 其它
                let txt = $(e).siblings("input[type='text']").val().trim();

                if (txt != "") {
                    if (mark > 0) {
                        regStr += "|";
                    }

                    regStr += txt;
                }
            } else if ($id == "splitColumn_type_06") { // 连续分隔符号视为单个处理
                regStr = "[" + regStr + "]+";
            }
        });

        return regStr;
    },
    getDataArr: function (regStr) {
        let _this = this;

        let arr = [];

        let r1 = Store.luckysheet_select_save[0].row[0];
        let r2 = Store.luckysheet_select_save[0].row[1];
        let c = Store.luckysheet_select_save[0].column[0];

        if (regStr != null && regStr != "") {
            let reg = new RegExp(regStr, "g");

            let dataArr = [];

            for (let r = r1; r <= r2; r++) {
                let rowArr = [];

                let cell = Store.flowdata[r][c];

                let value;
                if (cell != null && cell.m != null) {
                    value = cell.m;
                } else {
                    value = getcellvalue(r, c, Store.flowdata);
                }

                if (value == null) {
                    value = "";
                }

                rowArr = value.toString().split(reg);

                dataArr.push(rowArr);
            }

            let rlen = dataArr.length;
            let clen = 0;

            for (let i = 0; i < rlen; i++) {
                if (dataArr[i].length > clen) {
                    clen = dataArr[i].length;
                }
            }

            arr = _this.getNullData(rlen, clen);

            for (let i = 0; i < arr.length; i++) {
                for (let j = 0; j < arr[0].length; j++) {
                    if (dataArr[i][j] != null) {
                        arr[i][j] = dataArr[i][j];
                    }
                }
            }
        } else {
            for (let r = r1; r <= r2; r++) {
                let rowArr = [];

                let cell = Store.flowdata[r][c];

                let value;
                if (cell != null && cell.m != null) {
                    value = cell.m;
                } else {
                    value = getcellvalue(r, c, Store.flowdata);
                }

                if (value == null) {
                    value = "";
                }

                rowArr.push(value);

                arr.push(rowArr);
            }
        }

        return arr;
    },
    getNullData: function (rlen, clen) {
        let arr = [];

        for (let r = 0; r < rlen; r++) {
            let rowArr = [];

            for (let c = 0; c < clen; c++) {
                rowArr.push("");
            }

            arr.push(rowArr);
        }

        return arr;
    }
};

export default luckysheetSplitColumn;
